/* eslint-disable no-bitwise */
enum colorName {
	白色 = 0xffffff,
	红色 = 0xff0000,
	绿色 = 0x00ff00,
	蓝色 = 0x0000ff,
	牡丹红 = 0xff00ff,
	青色 = 0x00ffff,
	黄色 = 0xffff00,
	黑色 = 0x000000,
	海蓝 = 0x70db93,
	巧克力色 = 0x5c3317,
	蓝紫色 = 0x9f5f9f,
	黄铜色 = 0xb5a642,
	亮金色 = 0xd9d919,
	棕色 = 0xa67d3d,
	青铜色 = 0x8c7853,
	青铜色2 = 0xa67d3d,
	士官服蓝色 = 0x5f9f9f,
	冷铜色 = 0xd98719,
	铜色 = 0xb87333,
	珊瑚红 = 0xff7f00,
	紫蓝色 = 0x42426f,
	深棕 = 0x5c4033,
	深绿 = 0x2f4f2f,
	深铜绿色 = 0x4a766e,
	深橄榄绿 = 0x4f4f2f,
	深兰花色 = 0x9932cd,
	深紫色 = 0x871f78,
	深石板蓝 = 0x6b238e,
	深铅灰色 = 0x2f4f4f,
	深棕褐色 = 0x97694f,
	深绿松石色 = 0x7093db,
	暗木色 = 0x855e42,
	淡灰色 = 0x545454,
	土灰玫瑰红色 = 0x856363,
	长石色 = 0xd19275,
	火砖色 = 0x8e2323,
	森林绿 = 0x238e23,
	金色 = 0xcd7f32,
	鲜黄色 = 0xdbdb70,
	灰色 = 0xc0c0c0,
	铜绿色 = 0x527f76,
	青黄色 = 0x93db70,
	猎人绿 = 0x215e21,
	印度红 = 0x4e2f2f,
	土黄色 = 0x9f9f5f,
	浅蓝色 = 0xc0d9d9,
	浅灰色 = 0xa8a8a8,
	浅钢蓝色 = 0x8f8fbd,
	浅木色 = 0xe9c2a6,
	石灰绿色 = 0x32cd32,
	桔黄色 = 0xe47833,
	褐红色 = 0x8e236b,
	中海蓝色 = 0x32cd99,
	中蓝色 = 0x3232cd,
	中森林绿 = 0x6b8e23,
	中鲜黄色 = 0xeaeaae,
	中兰花色 = 0x9370db,
	中海绿色 = 0x426f42,
	中石板蓝色 = 0x7f00ff,
	中春绿色 = 0x7fff00,
	中绿松石色 = 0x70dbdb,
	中紫红色 = 0xdb7093,
	中木色 = 0xa68064,
	深藏青色 = 0x2f2f4f,
	海军蓝 = 0x23238e,
	霓虹篮 = 0x4d4dff,
	霓虹粉红 = 0xff6ec7,
	新深藏青色 = 0x00009c,
	新棕褐色 = 0xebc79e,
	暗金黄色 = 0xcfb53b,
	橙色 = 0xff7f00,
	橙红色 = 0xff2400,
	淡紫色 = 0xdb70db,
	浅绿色 = 0x8fbc8f,
	粉红色 = 0xbc8f8f,
	李子色 = 0xeaadea,
	石英色 = 0xd9d9f3,
	艳蓝色 = 0x5959ab,
	鲑鱼色 = 0x6f4242,
	猩红色 = 0xbc1717,
	海绿色 = 0x238e68,
	半甜巧克力色 = 0x6b4226,
	赭色 = 0x8e6b23,
	银色 = 0xe6e8fa,
	天蓝 = 0x3299cc,
	石板蓝 = 0x007fff,
	艳粉红色 = 0xff1cae,
	春绿色 = 0x00ff7f,
	钢蓝色 = 0x236b8e,
	亮天蓝色 = 0x38b0de,
	棕褐色 = 0xdb9370,
	紫红色 = 0xd8bfd8,
	石板蓝色 = 0xadeaea,
	浓深棕色 = 0x5c4033,
	淡浅灰色 = 0xcdcdcd,
	紫罗兰色 = 0x4f2f4f,
	紫罗兰红色 = 0xcc3299,
	麦黄色 = 0xd8d8bf,
	黄绿色 = 0x0099cc,
}

const COLOR_CHAR_OVER = 0xff0000;
const COLOR_CHAR_NORMAL = 0xf28507;
const COLOR_CHAR_FOLLOW = 0x00ff00;
const COLOR_CHAR_WHITE = 0xefefed;

const COLOR_TITLE_NORMAL = 0x00ff90;
const COLOR_ANI_OVER = 0xff0000;
const COLOR_ANI_NORMAL = 0xffffff;

const COLOR_BLOCK_FILL = 0x000080;
const COLOR_PATH_FILL = 0x0000ff;
const COLOR_PATHOBS_FILL = 0xff0000;
const COLOR_PATHOBSUP_FILL = 0x00ffff;
const COLOR_PATHLIGHT_FILL = 0xffff00;
const COLOR_PATHPLATEFORM_FILL = 0x00ff00;
const COLOR_PATH_LINE = 0xffff00;
const COLOR_ANI_FILL = 0x000080;
const COLOR_SOUND_FILL = 0x808000;

const COLOR_LABEL_OVER = 0xff0000;
const COLOR_LABEL_NORMAL = 0x000000;

function RGB(r: number, g: number, b: number) {
	// eslint-disable-next-line no-bitwise
	return (r << 16) | (g << 8) | b;
}

function getRGB(cr: number): number[] {
	const b = cr & 0xff;
	const g = (cr & 0xff00) >> 8;
	const r = (cr >> 16) & 0xff;
	return [r, g, b];
}

function getRGBA(cr: number): number[] {
	const a = cr & 0xff;
	const b = (cr & 0xff00) >> 8;
	const g = (cr >> 16) & 0xff;
	const r = (cr >> 24) & 0xff;
	return [r, g, b, a];
}

function RGBMul(cr: number, mul: number): number {
	const [r, g, b] = getRGB(cr);
	return (Math.floor(r * mul) << 16) | (Math.floor(g * mul) << 8) | Math.floor(b * mul);
}

enum ColorValueEnum {
	unknown = 0,
	white = 0xffffff,
	green = 0x00ff00,
	blue = 0x0000ff,
	purple = colorName.蓝紫色,
	orangle = colorName.橙色,
}

function randomColor() {
	return Math.randomInt(0, 0xffffff);
}

const ColorValuePrefix = ['', '#W', '#G', '#B', '#P', '#O'];

function getColorEnum(c: ColorEnum) {
	if (!c) {
		return 0;
	}
	return ColorValueEnum[ColorEnum[c]] || 0;
}

function getColorPrefix(c: ColorEnum): string {
	return ColorValuePrefix[c];
}

/**
 * 通过稀有度获取色值、道具框资源（如果有）
 * @param rank 品阶
 */
function getColorInfoByRank(rank: number): XlsColor {
	const color = getRank2colorInfo(rank) ? getRank2colorInfo(rank).Color : '无色';
	return getColorInfo(color);
}

type EuiTextColor =
	| '灰色'
	| '白色'
	| '绿色'
	| '蓝色'
	| '粉色'
	| '紫色'
	| '金色'
	| '橙色'
	| '红色'
	| '红色未达成';
/**
 * 获取某个颜色的色值
 * @param color 颜色
 */
function getColorByString(color: string): number {
	return getColorInfo(color)?.Color || 0;
}

type EuiColorMatrixFilter = '置灰';
/**
 * 获取指定样式的滤镜矩阵
 * 配置在display表格filter表中
 */
function getFilterStyle(style: EuiColorMatrixFilter): egret.ColorMatrixFilter {
	const { Matrix } = getFilterInfo(customColor.grey);
	return new egret.ColorMatrixFilter(Matrix);
}

function ObsColor(c: BaseObsType) {
	const COLOR_OBS_FILL = [
		0,
		0x0000ff, // '1'
		0x8b0000,
		0xff4500,
		0xffd700,
		0x00ff00,
		0x008b8b,
		0x4169e1,
		0x8a2be2,
		0xff69b4, // '9'
	];
	return COLOR_OBS_FILL[c > 9 ? 9 : c];
}
